home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple II Magazines (PO)
/
Nibble Volume 12, No. 03 (1991-03)(MindCraft Publishing)(Side A)[a].zip
/
Nibble Volume 12, No. 03 (1991-03)(MindCraft Publishing)(Side A)[a].po
/
DOUBLE.DUMP.S
< prev
next >
Wrap
Text File
|
1996-12-24
|
4KB
|
117 lines
****************************
* DOUBLE.DUMP *
* 40/80 COLUMN SCREEN DUMP *
* by James E. Trudeau *
* Copyright (C) 1991 *
* by MindCraft Publ. Corp. *
* Concord, MA 01742 *
****************************
* Merlin Assembler *
****************************
ORG $300
LINE = $FD ;count lines on screen
CV = $25 ;cursor vertical
BASL = $28 ;holds screen address
CSWL = $36 ;output hook low byte
CSWH = $37 ;output hook high byte
RDTEXT = $C01A ;read text mode
RDALTCHR = $C01E ;character set
RD80COL = $C01F ;80 column card status
PAGE1 = $C054 ;page 1 softswitch
PAGE1X = $C055 ;page 1X softswitch
TABV = $FB5B ;get screen address
IDBYTE = $FBC0 ;$EA = original IIe
CROUT = $FD8E ;output carriage return
COUT = $FDED ;output character
IOREST = $FF3F ;restore registers
IOSAVE = $FF4A ;save registers
JSR IOSAVE ;save registers
BIT RDTEXT ;are we in text mode?
BPL RESTORE ;no, then out
LDA CV
PHA ;save cursor position
LDA CSWH ;save CSW on stack
PHA
LDA CSWL
PHA
LDX #$C1 ;for slot 1
STX CSWH ;put in CSW
LDX #0 ;low byte
STX CSWL
STX LINE ;zero line counter
INITPTR INX
LDA PTRINIT-1,X ;init parallel printer
BEQ SCRNLOOP ;done
JSR COUT
BNE INITPTR ;get next character
SCRNLOOP JSR TABV ;get screen address
LDY #00 ;counter to zero
LINELOOP BIT RD80COL ;is 80 column card on?
BPL COL40 ;no, then skip page 1X
BIT PAGE1X ;turn on page 1X
LDA (BASL),Y ;get byte from page 1X
PHP ;save status
BIT PAGE1 ;turn on page 1
PLP ;restore status
JSR DOBYTE ;process the byte
COL40 LDA (BASL),Y ;get byte from page 1
JSR DOBYTE ;process the byte
INY ;increment counter
CPY #40 ;done 40/80 characters?
BCC LINELOOP ;no, do the next
JSR CROUT
INC LINE ;increment line counter
LDA LINE
CMP #24 ;done 24 lines?
BCC SCRNLOOP ;loop till done
*
* Restore system
*
PLA
STA CSWL ;restore CSW
PLA
STA CSWH
PLA ;get cursor location
TAX
DEX
BEQ CURSOR ;at top of screen
DEX
CURSOR STX CV ;restore cursor
RESTORE JMP IOREST ;restore registers
;return from there
*
* Transform byte for printer
*
DOBYTE BMI HIBIT ;high bit ascii
BIT RDALTCHR ;alternate characters?
BPL MAINCHAR ;no
LDX IDBYTE ;check identity
CPX #$EA ;unenhanced IIe?
BEQ SETHIBIT ;yes, then set high bit
CMP #$40 ;@ thru ? inverse
BLT MAINCHAR ;same as ROM characters
CMP #$60 ;lower case inverse
BLT SPACE ;mousetext
SETHIBIT ORA #$80 ;set high bit
HIBIT CMP #$FF ;delete character?
BEQ SPACE ;don't send that
CMP #$A0 ;control character?
BGE SENDIT ;no, then it's okay
SPACE LDA #$A0 ;send a space instead
BMI SENDIT ;always taken
MAINCHAR ORA #$C0 ;ascii in range $C0-$FF
CMP #$E0
BLT SENDIT ;$C0-DF, @ to underline
EOR #$40 ;$A0-BF, space to ?
SENDIT JSR COUT
RTS
*
* Parallel printer initialization code
*
PTRINIT HEX 89 ;ctrl-I
ASC "80N"
HEX 8D00